class Solution {
public:
/*
岛屿个数 = dfs的次数
每一次dfs把当前点（1）的近邻1全部变为0，避免影响后续经过这些点进行dfs。

解释：
如果全1，一次dfs改为全0，就不会进行dfs了，所以复杂度并不高，仅仅是O(MN)
*/
    void dfs(vector<vector<char>> &grid,int row,int column){
        grid[row][column] = '0';

        if (row+1<grid.size()&&grid[row+1][column]=='1') dfs(grid,row+1,column);
        if (column+1<grid[row].size()&&grid[row][column+1]=='1')  dfs(grid,row,column+1);
        if (row-1>=0&&grid[row-1][column]=='1') dfs(grid,row-1,column);
        if (column-1>=0&&grid[row][column-1]=='1') dfs(grid,row,column-1);
    }

    int numIslands(vector<vector<char>>& grid) {
        int size = grid.size(),island = 0;
        if (!size) return 0;
        int len = grid[0].size();
        for(int i=0;i<size;i++)
            for(int j =0 ;j<len;j++){
                if (grid[i][j]=='1'){
                    dfs(grid,i,j);
                    island++;
                }
            }
        return island;
    }
};